package es.ancabi.uno.annotator;

import modelo.Juego;
import modelo.Jugador;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.app.NavUtils;
import android.text.InputType;
import android.text.Layout;

public class MainActivity extends Activity {

	private Juego juego=null;
	
	private AlertDialog.Builder dialogo1;
	private AlertDialog.Builder dialogo2;
	private EditText valor;
	private EditText nuevoLimite;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setRequestedOrientation(1);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	public boolean onOptionsItemSelected(MenuItem item) {

		switch (item.getItemId()) {
		case R.id.nuevo_juego:
			comenzarNuevoJuego();
			return true;
		case R.id.agregarJugador:
			agregarJugador();
			return true;
		case R.id.about:
			about();
			return true;
		case R.id.limite:
			cambiarLimite();
			return true;
		}

		return false;
	}

	private void about() {
		
		AlertDialog.Builder dialogoAbout = new AlertDialog.Builder(this);  
		dialogoAbout.setTitle("About");  
		dialogoAbout.setMessage("Carlos Andres Billordo Peres \nEstudiante de Ingenieria informatica \nancabi@gmail.com\nVersion 1.0");            
		dialogoAbout.setCancelable(true);  
		dialogoAbout.setPositiveButton("OK", new DialogInterface.OnClickListener() {  
            public void onClick(DialogInterface dialogo1, int id) {  
            }

			 
        });   
        
		dialogoAbout.show();
		
	}

	public void comenzarNuevoJuego() {

		juego = new Juego(500);

		/*
		 * Dialog dialog = new Dialog(this);
		 * dialog.setContentView(R.layout.activity_dialog_add_jugador);
		 * dialog.setTitle("Nuevo juego"); TextView text = (TextView)
		 * dialog.findViewById(R.id.TextView01);
		 * text.setText("Numero de jugadores"); dialog.show();
		 * 
		 * EditText valor=(EditText) findViewById(R.id.edit_nombre);
		 */

		// Toast.makeText(this, valor.getText(), Toast.LENGTH_SHORT).show();

		Intent i = new Intent(MainActivity.this, NombresActivity.class);
		startActivityForResult(i, 0);
		
		

	}

	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		
		switch (requestCode) {
		case (0): {
			if (resultCode == Activity.RESULT_OK) {
				
				LinearLayout layout=(LinearLayout) findViewById(R.id.layoutJugadores);
				layout.removeAllViews();
				
				Bundle jugadores = data.getBundleExtra("jugadores");
				
				for(int x=0; x<jugadores.size(); x++){
					
					juego.addJugadorPrincipio(jugadores.getString("jugador "+x));
					
					agregarJugadorGUI(juego.getJugador(x), x);
					
					
				}
				
				Button pasar=(Button) findViewById(R.id.pasarRonda);
				pasar.setVisibility(Button.VISIBLE);
				TextView rondas=(TextView) findViewById(R.id.numeroRondas);
				rondas.setVisibility(TextView.VISIBLE);
				TextView textoRonda=(TextView) findViewById(R.id.textoNumRondas);
				textoRonda.setText(juego.getNumRondas());
				textoRonda.setVisibility(TextView.VISIBLE);
				
				
			}
			break;
		}
		}
	}
	
	private void agregarJugadorGUI(Jugador jugador, int numJugador){
		
		LinearLayout layout=(LinearLayout) findViewById(R.id.layoutJugadores);
		
		LinearLayout layoutJugador=new LinearLayout(this);
		layoutJugador.setOrientation(LinearLayout.HORIZONTAL);
		layoutJugador.setMinimumWidth(layout.getWidth());
		layoutJugador.setId(numJugador+1000);
		
		TextView tv=new TextView(this);
		tv.setId(numJugador);
		tv.setTextSize(30);
		tv.setMinWidth((layout.getWidth()/3)+50);
		tv.setText(jugador.getNombre());
		
		layoutJugador.addView(tv);
		
		EditText sumaPuntuacion=new EditText(this);
		sumaPuntuacion.setId(numJugador+10);
		sumaPuntuacion.setMinWidth(layout.getWidth()/3);
		sumaPuntuacion.setHint("0");
		sumaPuntuacion.setInputType(InputType.TYPE_CLASS_NUMBER);
		
		layoutJugador.addView(sumaPuntuacion);
		
		TextView puntuacion=new TextView(this);
		puntuacion.setId(numJugador+100);
		puntuacion.setMinWidth(layout.getWidth()/3);
		puntuacion.setGravity(Gravity.RIGHT);
		puntuacion.setTextSize(30);
		puntuacion.setText(""+jugador.getPuntuacion());
		
		layoutJugador.addView(puntuacion);
		
		layout.addView(layoutJugador);
	}
	
	public void pasarRonda(View v){
		
		int cantidad=0;
		
		//recorro los jugadores a ver si se introdujo todas las puntuaciones	
		for(int x=0; x<juego.getCantidadJugadores(); x++){
				
			EditText sumaPuntuacion=(EditText) findViewById(x+10);
			
			if((""+sumaPuntuacion.getText()).equals("")){
				cantidad++;
			}
		}
		
		//si la cantidad que se introdujo es menor que 2, osea que uno solo puede sacar 0
		if(cantidad<2){
		
			for(int x=0; x<juego.getCantidadJugadores(); x++){
				
				EditText sumaPuntuacion=(EditText) findViewById(x+10);
				
				TextView puntuacion=(TextView) findViewById(x+100);
				
				Jugador j=juego.getJugador(x);
				int total=j.getPuntuacion();
				
				int sumar;
				
				if((""+sumaPuntuacion.getText()).equals("")){
					sumar=0;
				}else{
					sumar=Integer.parseInt(""+sumaPuntuacion.getText());
				}
				total+=sumar;
				
				puntuacion.setText(""+total);
				sumaPuntuacion.setText("");
				j.setPuntuacion(total);
				
			}
			
			TextView rondas=(TextView) findViewById(R.id.numeroRondas);
			juego.rondaNueva();
			rondas.setText(" "+juego.getNumRondas());
			
		}else{
			Toast.makeText(this, "Debe rellenar todas las puntuaciones", Toast.LENGTH_SHORT).show();
		}
		
		juegoAcabado();
		
	}
	
	public void juegoAcabado(){
		
		for(int x=0; x<juego.getCantidadJugadores(); x++){
			
			Jugador j=juego.getJugador(x);
			
			int total=j.getPuntuacion();
			
			if(total>juego.getLimite() && !juego.isTerminado()){
				
				int idGanador=0;
				int puntuacionMinima=juego.getLimite();
				
				juego.setTerminado(true);
				
				TextView nombrePerdedor=(TextView) findViewById(x);
				nombrePerdedor.setTextColor(Color.RED);
				
				Toast.makeText(this, "El juego ha finalizado", Toast.LENGTH_SHORT).show();
				//Busco el ganador
				for(int y=0; y<juego.getCantidadJugadores(); y++){
					
					Jugador j1=juego.getJugador(y);
					
					int puntosJugador=j1.getPuntuacion();
					
					if(puntosJugador<puntuacionMinima){
						idGanador=y;
						puntuacionMinima=puntosJugador;
						
					}
					
					
				}
				
				TextView nombreGanador=(TextView) findViewById(idGanador);
				
				nombreGanador.setTextColor(Color.GREEN);
				
				Toast.makeText(this, "El ganador es "+nombreGanador.getText(), Toast.LENGTH_LONG).show();
				
			}
		
		}
	}
	
	public void agregarJugador(){
		
		if(juego!=null){
			dialogo1 = new AlertDialog.Builder(this);  
	        dialogo1.setTitle("Agregar jugador");  
	        dialogo1.setMessage("Introduzca el nombre del jugador");            
	        dialogo1.setCancelable(false);  
	        valor=new EditText(this);
	        dialogo1.setView(valor);
	        dialogo1.setPositiveButton("Confirmar", new DialogInterface.OnClickListener() {  
	            public void onClick(DialogInterface dialogo1, int id) {  
	                aceptarJugador();  
	            }  
	        });          
	        dialogo1.show();    
		}else{
			Toast.makeText(this, "Debe empezar un nuevo juego", Toast.LENGTH_SHORT).show();
		}
		
	}
	
	public void aceptarJugador(){
		
		juego.addJugadorEmpezado(valor.getText().toString());
		
		agregarJugadorGUI(juego.getJugador(juego.getCantidadJugadores()-1), juego.getCantidadJugadores()-1);
		
	}
	
	private void cambiarLimite(){
		
		if(juego!=null){
			dialogo2 = new AlertDialog.Builder(this);  
	        dialogo2.setTitle("Cambiar limite");  
	        dialogo2.setMessage("Introduzca el nuevo limite");            
	        dialogo2.setCancelable(true);  
	        nuevoLimite=new EditText(this);
	        nuevoLimite.setInputType(InputType.TYPE_CLASS_NUMBER);
	        dialogo2.setView(nuevoLimite);
	        dialogo2.setPositiveButton("Confirmar", new DialogInterface.OnClickListener() {  
	            public void onClick(DialogInterface dialogo1, int id) {  
	                aceptarCambiarLimite();  
	            }
	
				 
	        });   
	        dialogo2.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {  
	            public void onClick(DialogInterface dialogo1, int id) {   
	            }
	
				 
	        });   
	        dialogo2.show();
		}else{
			Toast.makeText(this, "Debe empezar un nuevo juego", Toast.LENGTH_SHORT).show();
		}
		
	}
	
	private void aceptarCambiarLimite() {
		
		try{
			int limite=Integer.parseInt(nuevoLimite.getText().toString());
			
			juego.setLimite(limite);
			
			Toast.makeText(this, "El limite del juego cambiado a "+limite, Toast.LENGTH_SHORT).show();
			
			juegoAcabado();
			
		}catch(NumberFormatException e){
			Toast.makeText(this, "Debe introducir solo numeros", Toast.LENGTH_SHORT).show();
		}
		
		
		
	} 

	
}